package com.hzw.saas.api.storage;

import java.util.Date;
import java.util.List;

import com.hzw.saas.api.storage.bo.UserSpaceBO;

/**
 * 用户存储空间权益服务接口
 *
 * @author zzl
 * @since 06/23/2021
 */
public interface IUserSpaceService {

    /**
     * 初始化用户存储空间，用于用户空间数据不完整时
     *
     * @param userId 用户ID
     */
    void initUserSpace(String userId);

    /**
     * 获取用户存储空间信息
     *
     * @param userId  用户ID
     * @param spaceId 存储空间ID
     * @return 存储空间信息
     */
    UserSpaceBO get(String userId, String spaceId);

    /**
     * 获取用户存储空间列表
     *
     * @param userId 用户ID
     * @return 存储空间列表
     */
    List<UserSpaceBO> list(String userId);

    /**
     * 新增用户存储空间数据
     *
     * @param userId     用户ID
     * @param spaceId    存储空间ID
     * @param spaceSize  存储空间大小, 如100M, 20G, 1T
     * @param expireTime 存储空间过期时间
     */
    void add(String userId, String spaceId, String spaceSize, Date expireTime);

    /**
     * 更新用户存储空间
     *
     * @param userId     用户ID
     * @param spaceId    存储空间ID
     * @param spaceSize  存储空间大小, 如100M, 20G, 1T
     * @param expireTime 存储空间过期时间
     * @return boolean
     */
    boolean update(String userId, String spaceId, String spaceSize, Date expireTime);

    /**
     * 删除用户存储空间
     *
     * @param userId  用户ID
     * @param spaceId 存储空间ID
     * @return boolean
     */
    boolean delete(String userId, String spaceId);

    /**
     * 根据总容量批量增加存储空间，容量值平均分配
     *
     * @param userId     用户ID
     * @param totalSize  存储空间ID
     * @param expireTime 过期时间
     */
    void batchSave(String userId, String totalSize, Date expireTime);

    /**
     * 根据总容量批量更新存储空间，容量值平均分配
     *
     * @param userId     用户ID
     * @param totalSize  存储空间ID
     * @param expireTime 过期时间
     */
    void batchUpdate(String userId, String totalSize, Date expireTime);

}
